package com.xjggb.栈;
import java.util.Arrays;
public class Stack01<E> {
//    定义一个数组
    private E[] elements;
//    定义一个长度变量
    private int size;
//    定义初始化变量
   private static final int DEFAULT_CAPACITY = 2;
    public  Stack01(int print){
        elements=(E[]) new Object[print];
    }
//    栈的初始化
    public Stack01(){
        elements=(E[]) new Object[DEFAULT_CAPACITY];
    }
//    入栈
    public void Push(E e){
//        判断是否需要扩容
        capacity(size+1);
        elements[size]=e;

        size++;
    }
//    出栈
    public E stack(){
        E element = elements[size-1];
        size--;
        return element;
    }
    public void clear(){
        elements=null;
    }
//    判断栈是否位空
    public boolean isEmpty(){
        return size==0;
    }
//    对数组进行扩容  传入size
    private  void capacity(int faceSize){
//        获取数组饿长度
        int length = elements.length;  //2
//       如果数组的长度大于或者等于size的长度就不扩容
        if (length>=faceSize)return;
//        扩容按一点五倍扩容
        int newCapacity = length + (length >> 1);
        //创建新的数组
        E[] newElements = (E[]) new Object[newCapacity];
//        遍历数据的长度
        for (int i = 0; i < size; i++) {
            newElements[i]=elements[i];
        }
        elements=newElements;
        System.out.println("newCapacity 扩容 " + newCapacity);
    }
}
